package com.nuoniu.sibanyun.service.crm.call;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.crm.call.CrmCallAgent;
import com.nuoniu.sibanyun.entity.crm.call.dto.*;
import com.nuoniu.sibanyun.entity.crm.call.vo.CrmCallAgentCustomerVo;
import com.nuoniu.sibanyun.entity.crm.call.vo.CrmCallAgentUserVo;
import com.nuoniu.sibanyun.entity.expenses.ExpensesProperty;
import com.nuoniu.sibanyun.entity.vo.SelectVo;

import java.util.List;

/**
 * <p>
 * 客户管理-坐席 服务类
 * </p>
 *
 * @author 白强
 * @since 2022-04-15
 */
public interface ICrmCallAgentService extends IService<CrmCallAgent> {

    /**
     * 分页查询 坐席(超级管理员)
     * @param crmCallAgentSearchDto
     * @return
     */
    Page<CrmCallAgent> pageCrmCallAgentBySystem(CrmCallAgentSearchDto crmCallAgentSearchDto);

    /**
     * 保存 坐席(超级管理员)
     * @param crmCallAgent
     */
    void saveCrmCallAgent(CrmCallAgent crmCallAgent);

    /**
     * 校验 坐席
     * @param loginAccount
     * @param tenantName
     * @param oldId
     * @return
     */
    int checkAgent(String loginAccount,String tenantName,Long oldId);

    /**
     * 批量删除 坐席(超级管理员)
     * @param dto
     */
    void deleteByIds(IdsAndCompanyIdDto dto);

    /**
     * 批量启用坐席(超级管理员)
     * @param dto
     */
    void batchEnable(IdsAndCompanyIdDto dto);

    void batchDisable(IdsAndCompanyIdDto dto);

    void batchUpdateStatus(List<Long> ids,Integer status);

    /**
     * 获取指定状态的数量
     * @param ids
     * @param status
     * @return
     */
    int batchCheckStatus(List<Long> ids,Integer status);

    /**
     * 分页查询 坐席（租户）
     * @param crmCallAgentSearchDto
     * @return
     */
    Page<CrmCallAgentCustomerVo> pageCrmCallAgentCustomerVo(CrmCallAgentSearchDto crmCallAgentSearchDto);

    /**
     * 分配 坐席（租户）
     * @param agentId
     * @param userId
     */
    void distributeAgent(Long agentId,Long userId,String userName);

    /**
     * 校验数量
     * @param crmCallAgent
     * @return
     */
    int checkData(CrmCallAgent crmCallAgent);


    /**
     * 获取没有分配的用户
     * @return
     */
    List<SelectVo> selectNotDistributeUser();

    /**
     * 新购坐席订单
     * @param agentOrderDto
     */
    void saveAgentOrder(AgentOrderDto agentOrderDto);

    /**
     * 坐席订单 交易成功
     * @param dealAgentOrderDto 交易Dto
     */
    void dealAgentOrder(DealAgentOrderDto dealAgentOrderDto);


    /**
     * 批量 开启/关闭 坐席
     * @param closeExpensesPropertyList
     * @param status 1:生效（开启） 2.暂停（关闭）
     * @return
     */
    void batchUpdateAgentFromExpensesProperty(List<ExpensesProperty> closeExpensesPropertyList,Integer status);

    /**
     * 坐席用户分配情况
     * @param dto
     * @return
     */
    Page<CrmCallAgentUserVo> pageCrmCallAgentUserVo(CrmCallAgentUserDto dto);


    /**
     * 保存 坐席（租户）
     * @param crmCallAgent
     */
    void saveAgentByCompany(CrmCallAgent crmCallAgent);

    /**
     * 批量启用坐席
     * @param ids
     */
    void batchEnableByCompany(List<Long> ids);
    /**
     * 批量禁用坐席
     * @param ids
     */
    void batchDisableByCompany(List<Long> ids);

    /**
     * 批量删除 坐席(租户)
     * @param ids
     */
    void deleteByIdsByCompany(List<Long> ids);

    /**
     * 获取用户的坐席
     * @return
     */
    CrmCallAgent getMyCrmCallAgent();

    /**
     * 通过绑定的电话号码 查询坐席
     * @param phone
     * @return
     */
    CrmCallAgent getByPhone(String phone);



}
